﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using System.Transactions;
using SMA.GENTEv1.Dados;
using SMA.GENTEv1.Procedures;

namespace SMA.GENTEv1
{
    public class AcoesLegaisHistoricoProcesso
    {
        #region Variaveis Membro
        private int _idHistoricoProcesso;
        private DateTime _dtHistorico;
        private string _obs;
        private DateTime? _dtHoraCadastro;
        private Pessoa _pessoaCadastro;
        private string _emailEnviado;
        private AcoesLegaisProcesso _processo;
        private AcoesLegaisImagemProcesso _imagem;
        private AcoesLegaisReclamante _reclamante;
        private GENTEEntities _context;
        #endregion

        #region Parametros
        public int IdHistoricoProcesso
        {
            get { return _idHistoricoProcesso; }
            set { _idHistoricoProcesso = value; }
        }
        
        public DateTime DtHistorico
        {
            get { return _dtHistorico; }
            set { _dtHistorico = value; }
        }

        public string Obs
        {
            get { return _obs; }
            set { _obs = value; }
        }

        public DateTime? DtHoraCadastro
        {
            get { return _dtHoraCadastro; }
            set { _dtHoraCadastro = value; }
        }

        public Pessoa PessoaCadastro
        {
            get { return _pessoaCadastro; }
            set { _pessoaCadastro = value; }
        }

        public string EmailEnviado
        {
            get { return _emailEnviado; }
            set { _emailEnviado = value; }
        }

        public AcoesLegaisProcesso Processo
        {
            get { return _processo; }
            set { _processo = value; }
        }

        public AcoesLegaisImagemProcesso Imagem
        {
            get { return _imagem; }
            set { _imagem = value; }
        }

        public AcoesLegaisReclamante Reclamante
        {
            get { return _reclamante; }
            set { _reclamante = value; }
        }
        #endregion

        #region Construtores
        public AcoesLegaisHistoricoProcesso()
        {
            _context = new GENTEEntities();
        }

        public AcoesLegaisHistoricoProcesso(int _idhistorico, bool _carregaDados, bool _carregaImagem, bool _carregaPessoaCadastro,
                                            bool _carregaProcesso, bool _carregaReclamante)
        {
            _context = new GENTEEntities();
            if (!_carregaDados)
                this._idHistoricoProcesso = _idhistorico;
            else
                Carregar(_idhistorico, _carregaImagem, _carregaPessoaCadastro, _carregaProcesso, _carregaReclamante);
        }
        #endregion

        #region Métodos Privados
        private void Carregar(int _idhistorico, bool _carregaImagem, bool _carregaPessoaCadastro, bool _carregaProcesso,
                              bool _carregaReclamante)
        {
            try
            {
                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                where historico.id_historico_processo == _idhistorico
                                select new
                                {
                                    historico.id_historico_processo,
                                    historico.dt_historico,
                                    historico.obs,
                                    historico.dt_hora_cadastro,
                                    id_pessoa_cadastro = historico.tab_pessoa.Id_pessoa,
                                    historico.email_enviado
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idHistoricoProcesso = list.id_historico_processo;
                    this._dtHistorico = list.dt_historico;
                    this._obs = list.obs;
                    this._dtHoraCadastro = list.dt_hora_cadastro;

                    if (_carregaPessoaCadastro)
                        this._pessoaCadastro = new Pessoa(list.id_pessoa_cadastro);
                    else
                    {
                        this._pessoaCadastro = new Pessoa();
                        this._pessoaCadastro.IdPessoa = list.id_pessoa_cadastro;
                    }

                    this._emailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        this._imagem = imagem.SelectImagem(list.id_historico_processo);
                    }

                    if (_carregaProcesso)
                    {
                        AcoesLegaisProcesso processo = new AcoesLegaisProcesso();
                    }

                    if (_carregaReclamante)
                    {
                        AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante();
                        this._reclamante = reclamante.SelectReclamantesHistorico(list.id_historico_processo, true, false);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private int RetornaIdHistoricoProcesso()
        {
            try
            {
                int _valorRetorno = 0;

                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                orderby historico.id_historico_processo descending
                                select new
                                {
                                    historico.id_historico_processo
                                }).Take(1);

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    _valorRetorno = list.id_historico_processo;
                }

                return _valorRetorno;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        private static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
        {
            if (null == valueSelector)
            {
                throw new
                    ArgumentNullException("valueSelector");
            }
            if (null == values) { throw new ArgumentNullException("values"); }

            ParameterExpression p = valueSelector.Parameters.Single();
            if (!values.Any())
            {
                return e => false;
            }

            var equals = values.Select(value =>
            (Expression)Expression.Equal(valueSelector.Body, Expression.Constant(value,
            typeof(TValue))));
            var body = equals.Aggregate<Expression>((accumulate, equal) =>
            Expression.Or(accumulate, equal));
            return Expression.Lambda<Func<TElement, bool>>(body, p);
        }

        private bool VerificaCadastro()
        {
            try
            {
                bool verifica = false;

                if ((this._dtHistorico == null) || (this._dtHistorico.Year == 1))
                    throw new Exception("É necessário informar a data do histórico!");

                if (this._obs == string.Empty)
                    throw new Exception("É necessário informar uma descrição para o histórico!");

                if (this._dtHoraCadastro == null)
                    throw new Exception("É necessário informar a data/hora do cadastro do histórico!");

                if (this._pessoaCadastro == null)
                    throw new Exception("É necessário informar o usuário que deseja cadastrar o histórico!");

                if (this._pessoaCadastro.IdPessoa == 0)
                    throw new Exception("É necessário informar o usuário que deseja cadastrar o histórico!");

                verifica = true;
                return verifica;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion

        #region Métodos Públicos
        public List<AcoesLegaisHistoricoProcesso> SelectHistorico(int _idprocesso, bool _carregaImagem, bool _carregaPessoaCadastro, 
                                                                  bool _carregaReclamante)
        {
            try
            {
                List<AcoesLegaisHistoricoProcesso> listHistorico = new List<AcoesLegaisHistoricoProcesso>();

                var consulta = from historico in _context.tab_acoes_legais_historico_processo
                               join historicoreclamante in _context.tab_acoes_reclamante_processo_historico_processo on historico.id_historico_processo equals historicoreclamante.tab_acoes_legais_historico_processo.id_historico_processo
                               join reclamante in _context.tab_acoes_legais_reclamante on historicoreclamante.tab_acoes_legais_reclamante.id_reclamante_processo equals reclamante.id_reclamante_processo
                               join processo in _context.tab_acoes_legais_processo on reclamante.tab_acoes_legais_processo.id_processo equals processo.id_processo
                               where processo.id_processo == _idprocesso
                               select new
                               {
                                   historico.id_historico_processo,
                                   historico.dt_historico,
                                   historico.obs,
                                   historico.dt_hora_cadastro,
                                   id_pessoa_cadastro = historico.tab_pessoa.Id_pessoa,
                                   historico.email_enviado
                               };

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    AcoesLegaisHistoricoProcesso historico = new AcoesLegaisHistoricoProcesso();
                    historico.IdHistoricoProcesso = list.id_historico_processo;
                    historico.DtHistorico = list.dt_historico;
                    historico.Obs = list.obs;
                    historico.DtHoraCadastro = list.dt_hora_cadastro;
                    historico.PessoaCadastro = new Pessoa(2);
                    historico.EmailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        historico.Imagem = imagem.SelectImagem(list.id_historico_processo);
                    }
                    
                    if (_carregaPessoaCadastro)
                        historico.PessoaCadastro = new Pessoa(list.id_pessoa_cadastro);
                    else
                    {
                        historico.PessoaCadastro = new Pessoa();
                        historico.PessoaCadastro.IdPessoa = list.id_pessoa_cadastro;
                    }

                    if (_carregaReclamante)
                    {
                        AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante();
                        historico.Reclamante = reclamante.SelectReclamantesHistorico(list.id_historico_processo, false, false);
                    }

                    listHistorico.Add(historico);
                }

                return listHistorico;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<AcoesLegaisHistoricoProcesso> SelectHistorico(int _idreclamante, bool _carregaImagem, bool _carregaPessoaCadastro)
        {
            try
            {
                List<AcoesLegaisHistoricoProcesso> listHistorico = new List<AcoesLegaisHistoricoProcesso>();

                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                join reclamantehistorico in _context.tab_acoes_reclamante_processo_historico_processo on historico.id_historico_processo equals reclamantehistorico.tab_acoes_legais_historico_processo.id_historico_processo
                                where reclamantehistorico.tab_acoes_legais_reclamante.id_reclamante_processo == _idreclamante
                                select new
                                {
                                    historico.id_historico_processo,
                                    historico.dt_historico,
                                    historico.obs,
                                    historico.dt_hora_cadastro,
                                    historico.email_enviado
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    AcoesLegaisHistoricoProcesso historico = new AcoesLegaisHistoricoProcesso();
                    historico.IdHistoricoProcesso = list.id_historico_processo;
                    historico.DtHistorico = list.dt_historico;
                    historico.Obs = list.obs;
                    historico.DtHoraCadastro = list.dt_hora_cadastro;
                    historico.EmailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        historico.Imagem = imagem.SelectImagem(list.id_historico_processo);
                    }

                    if (_carregaPessoaCadastro)
                    {
                        historico.PessoaCadastro = new Pessoa(7);
                    }

                    listHistorico.Add(historico);
                }

                return listHistorico;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public List<AcoesLegaisHistoricoProcesso> SelectPor(int _idhistorico, bool _carregaImagem, bool _carregaPessoaCadastro)
        {
            try
            {
                List<AcoesLegaisHistoricoProcesso> listHistorico = new List<AcoesLegaisHistoricoProcesso>();

                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                where historico.id_historico_processo == _idhistorico
                                select new
                                {
                                    historico.id_historico_processo,
                                    historico.dt_historico,
                                    historico.obs,
                                    historico.dt_hora_cadastro,
                                    id_pessoa_cadastro = historico.tab_pessoa.Id_pessoa,
                                    historico.email_enviado
                                });

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    AcoesLegaisHistoricoProcesso historico = new AcoesLegaisHistoricoProcesso();
                    historico.IdHistoricoProcesso = list.id_historico_processo;
                    historico.DtHistorico = list.dt_historico;
                    historico.Obs = list.obs;
                    if (_carregaPessoaCadastro)
                        historico.PessoaCadastro = new Pessoa(list.id_pessoa_cadastro);
                    else
                    {
                        historico.PessoaCadastro = new Pessoa();
                        historico.PessoaCadastro.IdPessoa = list.id_pessoa_cadastro;
                    }
                    historico.EmailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        historico.Imagem = imagem.SelectImagem(list.id_historico_processo);
                    }

                    listHistorico.Add(historico);
                }

                return listHistorico;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Salvar()
        {
            try
            {
                if (VerificaCadastro())
                {
                    if (this._idHistoricoProcesso == 0)
                    {
                        tab_acoes_legais_historico_processo tabHistorico = new tab_acoes_legais_historico_processo();

                        tabHistorico.dt_historico = this._dtHistorico;
                        tabHistorico.obs = this._obs;
                        tabHistorico.dt_hora_cadastro = this._dtHoraCadastro;
                        tabHistorico.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoaCadastro.IdPessoa);
                        tabHistorico.email_enviado = this._emailEnviado;

                        _context.AddTotab_acoes_legais_historico_processo(tabHistorico);
                        _context.SaveChanges();

                        this._idHistoricoProcesso = RetornaIdHistoricoProcesso();
                    }
                    else
                    {
                        tab_acoes_legais_historico_processo tabHistorico = (from historico in _context.tab_acoes_legais_historico_processo
                                                                            where historico.id_historico_processo == this._idHistoricoProcesso
                                                                            select historico).First();

                        tabHistorico.dt_historico = this._dtHistorico;
                        tabHistorico.obs = this._obs;
                        tabHistorico.dt_hora_cadastro = this._dtHoraCadastro;
                        tabHistorico.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoaCadastro.IdPessoa);
                        tabHistorico.email_enviado = this._emailEnviado;

                        _context.SaveChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void Salvar(int _idreclamante, DateTime? _dtfimprocesso)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    if (VerificaCadastro())
                    {
                        if (this._idHistoricoProcesso == 0)
                        {
                            tab_acoes_legais_historico_processo tabHistorico = new tab_acoes_legais_historico_processo();
                            tabHistorico.dt_historico = this._dtHistorico;
                            tabHistorico.obs = this._obs;
                            tabHistorico.dt_hora_cadastro = this._dtHoraCadastro;
                            tabHistorico.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoaCadastro.IdPessoa);
                            tabHistorico.email_enviado = this._emailEnviado;

                            _context.AddTotab_acoes_legais_historico_processo(tabHistorico);
                            _context.SaveChanges();

                            this._idHistoricoProcesso = RetornaIdHistoricoProcesso();

                            tab_acoes_reclamante_processo_historico_processo tabReclamanteHistorico = new tab_acoes_reclamante_processo_historico_processo();
                            tabReclamanteHistorico.tab_acoes_legais_historico_processoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_acoes_legais_historico_processo", "id_historico_processo", this._idHistoricoProcesso);
                            tabReclamanteHistorico.tab_acoes_legais_reclamanteReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_acoes_legais_reclamante", "id_reclamante_processo", _idreclamante);

                            _context.AddTotab_acoes_reclamante_processo_historico_processo(tabReclamanteHistorico);
                            _context.SaveChanges();

                            if (this._imagem != null)
                            {
                                this._imagem.HistoricoProcesso = new AcoesLegaisHistoricoProcesso();
                                this._imagem.HistoricoProcesso = this;
                                this._imagem.Salvar();
                            }

                            if (_dtfimprocesso != null)
                            {
                                AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante(_idreclamante, true, false, true, true);
                                reclamante.DtFimProcesso = _dtfimprocesso;
                                reclamante.Salvar();

                                bool fimprocesso = (reclamante.SelectQtdeReclamantesProcesso(reclamante.Processo[0].IdProcesso) == 0) ? true : false;
                                if (fimprocesso)
                                {
                                    AcoesLegaisProcesso processo = new AcoesLegaisProcesso(reclamante.Processo[0].IdProcesso, true, false, false, true);
                                    processo.FinalizarProcesso(_dtfimprocesso);
                                }
                            }
                        }
                        else
                        {
                            tab_acoes_legais_historico_processo tabHistorico = (from historico in _context.tab_acoes_legais_historico_processo
                                                                                where historico.id_historico_processo == this._idHistoricoProcesso
                                                                                select historico).First();

                            tabHistorico.dt_historico = this._dtHistorico;
                            tabHistorico.obs = this._obs;
                            tabHistorico.dt_hora_cadastro = this._dtHoraCadastro;
                            tabHistorico.tab_pessoaReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_pessoa", "Id_pessoa", this._pessoaCadastro.IdPessoa);
                            tabHistorico.email_enviado = this._emailEnviado;

                            _context.SaveChanges();

                            if (this._imagem != null)
                            {
                                this._imagem.HistoricoProcesso = new AcoesLegaisHistoricoProcesso();
                                this._imagem.HistoricoProcesso = this;
                                this._imagem.Salvar();
                            }

                            if (_dtfimprocesso != null)
                            {
                                AcoesLegaisReclamante reclamante = new AcoesLegaisReclamante(_idreclamante, true, false, true, true);
                                reclamante.DtFimProcesso = _dtfimprocesso;
                                reclamante.Salvar();

                                bool fimprocesso = (reclamante.SelectQtdeReclamantesProcesso(reclamante.Processo[0].IdProcesso) == 0) ? true : false;
                                if (fimprocesso)
                                {
                                    AcoesLegaisProcesso processo = new AcoesLegaisProcesso(reclamante.Processo[0].IdProcesso, true, false, false, true);
                                    processo.FinalizarProcesso(_dtfimprocesso);
                                }
                            }
                        }
                    }

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }

        public void Excluir(int[] _idhistoricos)
        {
            try
            {
                var consulta = (from historico in _context.tab_acoes_legais_historico_processo.Where((BuildContainsExpression<tab_acoes_legais_historico_processo, int>(item => item.id_historico_processo, _idhistoricos)))
                                select historico);

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    _context.DeleteObject(list);
                    _context.SaveChanges();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void AcionarSPHistorico(int _idhistorico)
        {
            Procedure storeProc = new Procedure();
            storeProc.SPHistoricoAcoesJudiciais(_context.Connection, _idhistorico);
        }

        public void ReplicarHistoricoReclamantes(int _idhistorico, int _idreclamantehistorico)
        {
            using (TransactionScope scope = new TransactionScope())
            {
                try
                {
                    tab_acoes_legais_processo tabProcesso = (from historico in _context.tab_acoes_legais_historico_processo
                                                             join reclamantehistorico in _context.tab_acoes_reclamante_processo_historico_processo on historico.id_historico_processo equals reclamantehistorico.tab_acoes_legais_historico_processo.id_historico_processo
                                                             join reclamante in _context.tab_acoes_legais_reclamante on reclamantehistorico.tab_acoes_legais_reclamante.id_reclamante_processo equals reclamante.id_reclamante_processo
                                                             join processo in _context.tab_acoes_legais_processo on reclamante.tab_acoes_legais_processo.id_processo equals processo.id_processo
                                                             where historico.id_historico_processo == _idhistorico
                                                             select processo).First();

                    var consulta = (from reclamante in _context.tab_acoes_legais_reclamante
                                    where reclamante.tab_acoes_legais_processo.id_processo == tabProcesso.id_processo
                                    && reclamante.id_reclamante_processo != _idreclamantehistorico
                                    select new
                                    {
                                        reclamante.id_reclamante_processo
                                    });

                    var listConsulta = consulta.ToList();

                    foreach (var list in listConsulta)
                    {
                        tab_acoes_reclamante_processo_historico_processo tabReclamanteHistorico = new tab_acoes_reclamante_processo_historico_processo();
                        tabReclamanteHistorico.tab_acoes_legais_historico_processoReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_acoes_legais_historico_processo", "id_historico_processo", _idhistorico);
                        tabReclamanteHistorico.tab_acoes_legais_reclamanteReference.EntityKey = new System.Data.EntityKey("GENTEEntities.tab_acoes_legais_reclamante", "id_reclamante_processo", list.id_reclamante_processo);

                        _context.AddTotab_acoes_reclamante_processo_historico_processo(tabReclamanteHistorico);
                        _context.SaveChanges();
                    }

                    scope.Complete();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            AcionarSPHistorico(_idhistorico);
        }

        public void ProximoHistorico(int _idhistorico, DateTime _dthistorico, int _idreclamante, bool _carregaPessoaCadastro, bool _carregaImagem)
        {
            try
            {
                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                join reclamantehistorico in _context.tab_acoes_reclamante_processo_historico_processo on historico.id_historico_processo equals reclamantehistorico.tab_acoes_legais_historico_processo.id_historico_processo
                                where historico.dt_historico > _dthistorico
                                && reclamantehistorico.tab_acoes_legais_reclamante.id_reclamante_processo == _idreclamante
                                orderby historico.dt_historico, historico.id_historico_processo
                                select new
                                {
                                    historico.id_historico_processo,
                                    historico.dt_historico,
                                    historico.obs,
                                    historico.dt_hora_cadastro,
                                    id_pessoa_cadastro = historico.tab_pessoa.Id_pessoa,
                                    historico.email_enviado
                                }).Take(1);

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idHistoricoProcesso = list.id_historico_processo;
                    this._dtHistorico = list.dt_historico;
                    this._obs = list.obs;
                    this._dtHoraCadastro = list.dt_hora_cadastro;
                    if (_carregaPessoaCadastro)
                        this._pessoaCadastro = new Pessoa(list.id_pessoa_cadastro);
                    else
                    {
                        this._pessoaCadastro = new Pessoa();
                        this._pessoaCadastro.IdPessoa = list.id_pessoa_cadastro;
                    }
                    this._emailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        this._imagem = imagem.SelectImagem(list.id_historico_processo);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void HistoricoAnterior(int _idhistorico, DateTime _dthistorico, int _idreclamante, bool _carregaPessoaCadastro, bool _carregaImagem)
        {
            try
            {
                var consulta = (from historico in _context.tab_acoes_legais_historico_processo
                                join reclamantehistorico in _context.tab_acoes_reclamante_processo_historico_processo on historico.id_historico_processo equals reclamantehistorico.tab_acoes_legais_historico_processo.id_historico_processo
                                where historico.dt_historico < _dthistorico
                                && reclamantehistorico.tab_acoes_legais_reclamante.id_reclamante_processo == _idreclamante
                                orderby historico.dt_historico descending, historico.id_historico_processo descending
                                select new
                                {
                                    historico.id_historico_processo,
                                    historico.dt_historico,
                                    historico.obs,
                                    historico.dt_hora_cadastro,
                                    id_pessoa_cadastro = historico.tab_pessoa.Id_pessoa,
                                    historico.email_enviado
                                }).Take(1);

                var listConsulta = consulta.ToList();

                foreach (var list in listConsulta)
                {
                    this._idHistoricoProcesso = list.id_historico_processo;
                    this._dtHistorico = list.dt_historico;
                    this._obs = list.obs;
                    this._dtHoraCadastro = list.dt_hora_cadastro;
                    if (_carregaPessoaCadastro)
                        this._pessoaCadastro = new Pessoa(list.id_pessoa_cadastro);
                    else
                    {
                        this._pessoaCadastro = new Pessoa();
                        this._pessoaCadastro.IdPessoa = list.id_pessoa_cadastro;
                    }
                    this._emailEnviado = list.email_enviado;

                    if (_carregaImagem)
                    {
                        AcoesLegaisImagemProcesso imagem = new AcoesLegaisImagemProcesso();
                        this._imagem = imagem.SelectImagem(list.id_historico_processo);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        #endregion
    }
}
